import os
import re
#*****************************************************************************
# PURPOSE: 
# USAGE:   
# PASSED ARGS:  
# RETURN ARGS: 
# Error - Fail Error Message
#*****************************************************************************
class Config( object ):
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************
	def  __init__( self, delimiter = "\t" ):
		self.delimiter = delimiter
		self.cfgItems = {}	
		
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************
	def  setDelimiter( self , delimiter):		
		self.delimiter = delimiter
		
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************
	def  getDelimiter( self ):		
		return self.delimiter
			
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************		
	def setConfigPath( self, configPath ):	
		self.configPath = configPath
		
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************				
	def getConfigPath( self ):
		return self.configPath
		
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************								
	def setInputPath( self, inputPath ):	
		self.inputPath = inputPath

	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************								
	def getInputPath( self ):		
		return self.inputPath
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************								
	def setEntryFile( self, entryFile ):	
		self.entryFile = entryFile

	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************								
	def getEntryFile( self ):		
		return self.entryFile
	
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************					
	def initCfgItems( self ):
		self.cfgItems = {}	

	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************					
	def getItems( self ):
		return 	self.cfgItems
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************		
	def readEntryFile( self, entryFile = None ):
		if entryFile is None:
			entryFile = self.entryFile
		if not os.path.isfile( entryFile ):
			return 0
		self.initCfgItems()
		
		for line in entryFile:
			line.strip()
			if not line or line[ 0 ] == '#':
				continue
			items = re.split("\s+", line )
			if len( items ) == 2:	
				itemName = items[ 0 ].upper()
				itemValue = items[ 1 ]
				if not self.cfgItems.has_key( itemName ):
					self.cfgItems[ itemName ] = []
					self.cfgItems[ itemName ].append( itemValue )
				elif itemValue not in self.cfgItems[ itemName ]:
					self.cfgItems[ itemName ].append( itemValue )
		return len( self.initCfgItems )			
	
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************	
	def hasItem( self, itemName ):
		itemName = itemName.upper()
		return self.cfgItems.has_key( itemName )
		
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************						
	def getItem( self, itemName, needAll = None ):
		itemName = itemName.upper()
		if not self.cfgItems.has_key( itemName ):
			return False
		elif not needAll: 
			return self.cfgItems[ itemName ][ -1 ]
		else:	
			return self.cfgItems[ itemName ]
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************						
	def readWaferInfo( self ):
		pass
	


	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************
	def readDataLoadingDirectives( self ):
		pass
	
	#***************************************************************************
	# PURPOSE: 
	# USAGE:   
	# PASSED ARGS:  
	# RETURN ARGS: 
	# Error - Fail Error Message
	#***************************************************************************
	def readInputData( self ):
		pass
		
		
		